home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue37 / outlook / mapi / tnef.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1997-06-19  |  11.5 KB  |  402 lines

  1. {++
  2.  
  3.   t n e f . p a s
  4.  
  5.   Abstract:
  6.  
  7.     Automatic conversion of tnef.h.
  8.  
  9.   Comments:
  10.  
  11.     This source file automatically converted by
  12.     htrans 0.91 beta 1 Copyright (c) 1997 Alexander Staubo
  13.  
  14.   Revision history:
  15.  
  16.     18-06-1997 20:53 alex  [Autogenerated]
  17.     18-06-1997 20:53 alex  Retouched for release
  18.  
  19. --}
  20.  
  21. unit Tnef;
  22.  
  23. {$A+}
  24. {$MINENUMSIZE 4}
  25.  
  26. interface
  27.  
  28. uses
  29.   Windows, SysUtils, ActiveX,
  30.   MapiDefs, MapiGuid, MapiX;
  31.  
  32. (*
  33.  *  T N E F . H
  34.  *
  35.  *
  36.  *  This file contains structure and function definitions for the
  37.  *  MAPI implementation of the Transport Neutral Encapsilation Format
  38.  *  used by MAPI providers for the neutral serialization of a MAPI
  39.  *  message.  This implementation sits on top of the IStream object as
  40.  *  documented in the OLE 2 Specs.
  41.  *
  42.  *  Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
  43.  *)
  44.  
  45. { ------------------------------------ }
  46.  
  47. { TNEF Problem and TNEF Problem Arrays }
  48.  
  49. { ------------------------------------ }
  50.  
  51. type
  52.   TSTnefProblem =     
  53.     record
  54.       ulComponent : ULONG;
  55.       ulAttribute : ULONG;
  56.       ulPropTag : ULONG;
  57.       scode : SCODE;
  58.     end;
  59.     
  60.   TSTnefProblemArray =     
  61.     record
  62.       cProblem : ULONG;
  63.       aProblem : array[0..MAPI_DIM - 1] of TSTnefProblem;
  64.     end;
  65.     
  66.   PSTnefProblemArray = ^TSTnefProblemArray;
  67.   
  68. { Pointers to TNEF Interface ---------------------------------------- }
  69.  
  70. {  OpenTNEFStream }
  71.  
  72. const
  73.   TNEF_DECODE = (ULONG(0));
  74.   TNEF_ENCODE = (ULONG(2));
  75.   TNEF_PURE = (ULONG($00010000));
  76.   TNEF_COMPATIBILITY = (ULONG($00020000));
  77.   TNEF_BEST_DATA = (ULONG($00040000));
  78.   TNEF_COMPONENT_ENCODING = (ULONG($80000000));
  79.  
  80. {  AddProps, ExtractProps }
  81.  
  82. const
  83.   TNEF_PROP_INCLUDE = (ULONG($00000001));
  84.   TNEF_PROP_EXCLUDE = (ULONG($00000002));
  85.   TNEF_PROP_CONTAINED = (ULONG($00000004));
  86.   TNEF_PROP_MESSAGE_ONLY = (ULONG($00000008));
  87.   TNEF_PROP_ATTACHMENTS_ONLY = (ULONG($00000010));
  88.   TNEF_PROP_CONTAINED_TNEF = (ULONG($00000040));
  89.  
  90. {  FinishComponent }
  91.  
  92. const
  93.   TNEF_COMPONENT_MESSAGE = (ULONG($00001000));
  94.   TNEF_COMPONENT_ATTACHMENT = (ULONG($00002000));
  95.  
  96. type
  97.   ITnef =
  98.     interface(IUnknown)
  99.     [strIID_ITnef]
  100.       function QueryInterface (riid : PIID; var ppvObj : Pointer) : HResult; stdcall;
  101.       function AddRef : ULONG; stdcall;
  102.       function Release : ULONG; stdcall;
  103.       function AddProps (ulFlags : ULONG; ulElemID : ULONG; lpvData : Pointer; 
  104.         lpPropList : PSPropTagArray) : HResult; stdcall;
  105.       function ExtractProps (ulFlags : ULONG; lpPropList : PSPropTagArray; 
  106.         var lpProblems : PSTnefProblemArray) : HResult; stdcall;
  107.       function Finish (ulFlags : ULONG; var lpKey : Word; 
  108.         var lpProblems : PSTnefProblemArray) : HResult; stdcall;
  109.       function OpenTaggedBody (lpMessage : IMessage; ulFlags : ULONG; 
  110.         var lppStream : IStream) : HResult; stdcall;
  111.       function SetProps (ulFlags : ULONG; ulElemID : ULONG; cValues : ULONG; 
  112.         lpProps : PSPropValue) : HResult; stdcall;
  113.       function EncodeRecips (ulFlags : ULONG; lpRecipientTable : IMAPITable) : HResult; stdcall;
  114.       function FinishComponent (ulFlags : ULONG; ulComponentID : ULONG; 
  115.         lpCustomPropList : PSPropTagArray; lpCustomProps : PSPropValue; 
  116.         lpPropList : PSPropTagArray; var lpProblems : PSTnefProblemArray) : HResult; stdcall;
  117.     end;
  118.  
  119. function OpenTnefStream (lpvSupport : Pointer; lpStream : IStream;
  120.   lpszStreamName : PChar; ulFlags : ULONG; lpMessage : IMessage;
  121.   wKeyVal : Word; var lppTNEF : ITnef) : HResult; stdcall;
  122.  
  123. type
  124.   TOPENTNEFSTREAM = function (lpvSupport : Pointer; lpStream : IStream;
  125.     lpszStreamName : PChar; ulFlags : ULONG; lpMessage : IMessage;
  126.     wKeyVal : Word; var lppTNEF : ITnef) : HResult; stdcall;
  127.  
  128.   POPENTNEFSTREAM = ^TOPENTNEFSTREAM;
  129.  
  130. function OpenTnefStreamEx (lpvSupport : Pointer; lpStream : IStream; 
  131.   lpszStreamName : PChar; ulFlags : ULONG; lpMessage : IMessage;
  132.   wKeyVal : Word; lpAdressBook : IAddrBook;
  133.   var lppTNEF : ITnef) : HResult; stdcall;
  134.  
  135. type
  136.   TOPENTNEFSTREAMEX = function (lpvSupport : Pointer; lpStream : IStream;
  137.     lpszStreamName : PChar; ulFlags : ULONG; lpMessage : IMessage;
  138.     wKeyVal : Word; lpAdressBook : IAddrBook; var lppTNEF : ITnef) : HResult; stdcall;
  139.  
  140.   POPENTNEFSTREAMEX = ^TOPENTNEFSTREAMEX;
  141.  
  142. function GetTnefStreamCodepage (lpStream : IStream; var lpulCodepage : ULONG;
  143.   var lpulSubCodepage : ULONG) : HResult; stdcall;
  144.  
  145. type
  146.   PGETTNEFSTREAMCODEPAGE = function (lpStream : IStream; var lpulCodepage : ULONG; 
  147.     var lpulSubCodepage : ULONG) : HResult; stdcall;
  148.  
  149. {!! String renamed with "str" prefix }
  150.  
  151. const
  152.   strOPENTNEFSTREAM = 'OpenTnefStream';
  153.   strOPENTNEFSTREAMEX = 'OpenTnefStreamEx';
  154.   strGETTNEFSTREAMCODEPAGE = 'GetTnefStreamCodePage';
  155.  
  156. { -------------------------- }
  157.  
  158. { TNEF Signature and Version }
  159.  
  160. { -------------------------- }
  161.  
  162. const
  163.   TNEF_SIGNATURE = (ULONG($223E9F78));
  164.   TNEF_VERSION = (ULONG((ULONG(1) and $FFFF shl 16) or (ULONG(0) and $FFFF)));
  165.  
  166. { ------------------------------------------- }
  167.  
  168. { TNEF Down-level Attachment Types/Structures }
  169.  
  170. { ------------------------------------------- }
  171.  
  172. type
  173.   TATYP = Word;
  174.  
  175. //!! Enum converted to constants
  176.  
  177. const
  178.   atypNull = 0;
  179.   atypFile = 1;
  180.   atypOle = 2;
  181.   atypPicture = 3;
  182.   atypMax = 4;
  183.  
  184. const
  185.   MAC_BINARY = (DWORD($00000001));
  186.  
  187. {!! #pragma pack(1) converted to this directive }
  188. {$A-}
  189.  
  190. type
  191.   TRENDDATA =     
  192.     record
  193.       atyp : TATYP;
  194.       ulPosition : ULONG;
  195.       dxWidth : Word;
  196.       dyHeight : Word;
  197.       dwFlags : DWORD;
  198.     end;
  199.     
  200.   TPRENDDATA = ^TRENDDATA;
  201.  
  202. { ----------------------------------- }
  203.  
  204. { TNEF Down-level Date/Time Structure }
  205.  
  206. { ----------------------------------- }
  207.  
  208.   TDTR =
  209.     record
  210.       wYear : Word;
  211.       wMonth : Word;
  212.       wDay : Word;
  213.       wHour : Word;
  214.       wMinute : Word;
  215.       wSecond : Word;
  216.       wDayOfWeek : Word;
  217.     end;
  218.  
  219. {!! #pragma pack() converted to this directive }
  220. {$A+}
  221.  
  222. { ----------------------------- }
  223.  
  224. { TNEF Down-level Message Flags }
  225.  
  226. { ----------------------------- }
  227.  
  228. const
  229.   fmsNull = (Byte($00));
  230.   fmsModified = (Byte($01));
  231.   fmsLocal = (Byte($02));
  232.   fmsSubmitted = (Byte($04));
  233.   fmsRead = (Byte($20));
  234.   fmsHasAttach = (Byte($80));
  235.  
  236. { ----------------------------------------- }
  237.  
  238. { TNEF Down-level Triple Address Structures }
  239.  
  240. { ----------------------------------------- }
  241.  
  242. const
  243.   trpidNull = (Word($0000));
  244.   trpidUnresolved = (Word($0001));
  245.   trpidResolvedNSID = (Word($0002));
  246.   trpidResolvedAddress = (Word($0003));
  247.   trpidOneOff = (Word($0004));
  248.   trpidGroupNSID = (Word($0005));
  249.   trpidOffline = (Word($0006));
  250.   trpidIgnore = (Word($0007));
  251.   trpidClassEntry = (Word($0008));
  252.   trpidResolvedGroupAddress = (Word($0009));
  253.  
  254. type
  255.   TTRP =     
  256.     record
  257.       trpid : Word;
  258.       cbgrtrp : Word;
  259.       cch : Word;
  260.       cbRgb : Word;
  261.     end;
  262.     
  263.   TPTRP = ^TTRP;
  264.   
  265.   TPGRTRP = ^TPTRP;
  266.   
  267.   PTRP = ^TPGRTRP;
  268.   
  269.   TXTYPE = DWORD;
  270.   
  271. const
  272.   xtypeUnknown = (TXTYPE(0));
  273.   xtypeInternet = (TXTYPE(6));
  274.   cbDisplayName = 41;
  275.   cbEmailName = 11;
  276.   cbSeverName = 12;
  277.  
  278. type
  279.   TADDRALIAS =     
  280.     record
  281.       rgchName : array[0..cbDisplayName - 1] of Char;
  282.       rgchEName : array[0..cbEmailName - 1] of Char;
  283.       rgchSrvr : array[0..cbSeverName - 1] of Char;
  284.       dibDetail : ULONG;
  285.       _type : Word;  //!! Member "type" renamed to "_type"
  286.     end;
  287.     
  288.   PADDRALIAS = ^TADDRALIAS;
  289.   
  290. const
  291. {!! This construct refers to a non-existent identifier (ALIAS):
  292.   cbALIAS = SizeOf(ALIAS);
  293. }
  294.   cbTYPE = 16;
  295.   cbMaxIdData = 200;
  296.  
  297. type
  298.   TNSID =
  299.     record
  300.       dwSize : DWORD;
  301.       uchType : array[0..cbTYPE - 1] of Char;
  302.       xtype : TXTYPE;
  303.       lTime : Longint;
  304.       address :         
  305.         record
  306.           case Integer of
  307.             1 : 
  308.               (
  309.                 alias : TADDRALIAS;
  310.               );
  311.             2 : 
  312.               (
  313.                 rgchInterNet : array[0..1 - 1] of Char;
  314.               );
  315.         end;
  316.     end;
  317.     
  318.   PNSID = ^TNSID;
  319.   
  320. const
  321.   cbNSID = SizeOf(TNSID);
  322.  
  323. { -------------------------- }
  324.  
  325. { TNEF Down-level Priorities }
  326.  
  327. { -------------------------- }
  328.  
  329. const
  330.   prioLow = 3;
  331.   prioNorm = 2;
  332.   prioHigh = 1;
  333.  
  334. { ------------------------------------- }
  335.  
  336. { TNEF Down-level Attributes/Properties }
  337.  
  338. { ------------------------------------- }
  339.  
  340. const
  341.   atpTriples = (Word($0000));
  342.   atpString = (Word($0001));
  343.   atpText = (Word($0002));
  344.   atpDate = (Word($0003));
  345.   atpShort = (Word($0004));
  346.   atpLong = (Word($0005));
  347.   atpByte = (Word($0006));
  348.   atpWord = (Word($0007));
  349.   atpDword = (Word($0008));
  350.   atpMax = (Word($0009));
  351.  
  352.   LVL_MESSAGE = (Byte($01));
  353.   LVL_ATTACHMENT = (Byte($02));
  354.  
  355. const
  356.   attNull = (DWORD(0) shl 16) or WORD($0000);
  357.   attFrom = (DWORD(atpTriples) shl 16) or WORD($8000); { PR_ORIGINATOR_RETURN_ADDRESS }
  358.   attSubject = (DWORD(atpString) shl 16) or WORD($8004); { PR_SUBJECT }
  359.   attDateSent = (DWORD(atpDate) shl 16) or WORD($8005); { PR_CLIENT_SUBMIT_TIME }
  360.   attDateRecd = (DWORD(atpDate) shl 16) or WORD($8006); { PR_MESSAGE_DELIVERY_TIME }
  361.   attMessageStatus = (DWORD(atpByte) shl 16) or WORD($8007); { PR_MESSAGE_FLAGS }
  362.   attMessageClass = (DWORD(atpWord) shl 16) or WORD($8008); { PR_MESSAGE_CLASS }
  363.   attMessageID = (DWORD(atpString) shl 16) or WORD($8009); { PR_MESSAGE_ID }
  364.   attParentID = (DWORD(atpString) shl 16) or WORD($800A); { PR_PARENT_ID }
  365.   attConversationID = (DWORD(atpString) shl 16) or WORD($800); { PR_CONVERSATION_ID }
  366.   attBody = (DWORD(atpText) shl 16) or WORD($800C); { PR_BODY }
  367.   attPriority = (DWORD(atpShort) shl 16) or WORD($800D); { PR_IMPORTANCE }
  368.   attAttachData = (DWORD(atpByte) shl 16) or WORD($800F); { PR_ATTACH_DATA_xxx }
  369.   attAttachTitle = (DWORD(atpString) shl 16) or WORD($8010); { PR_ATTACH_FILENAME }
  370.   attAttachMetaFile = (DWORD(atpByte) shl 16) or WORD($8011); { PR_ATTACH_RENDERING }
  371.   attAttachCreateDate = (DWORD(atpDate) shl 16) or WORD($8012); { PR_CREATION_TIME }
  372.   attAttachModifyDate = (DWORD(atpDate) shl 16) or WORD($8013); { PR_LAST_MODIFICATION_TIME }
  373.   attDateModified = (DWORD(atpDate) shl 16) or WORD($8020); { PR_LAST_MODIFICATION_TIME }
  374.   attAttachTransportFilename = (DWORD(atpByte) shl 16) or WORD($9001); { PR_ATTACH_TRANSPORT_NAME }
  375.   attAttachRenddata = (DWORD(atpByte) shl 16) or WORD($9002);
  376.   attMAPIProps = (DWORD(atpByte) shl 16) or WORD($9003);
  377.   attRecipTable = (DWORD(atpByte) shl 16) or WORD($9004); { PR_MESSAGE_RECIPIENTS }
  378.   attAttachment = (DWORD(atpByte) shl 16) or WORD($9005);
  379.   attTnefVersion = (DWORD(atpDword) shl 16) or WORD($9006);
  380.   attOemCodepage = (DWORD(atpByte) shl 16) or WORD($9007);
  381.   attOriginalMessageClass = (DWORD(atpWord) shl 16) or WORD($0006); { PR_ORIG_MESSAGE_CLASS }
  382.   attOwner = (DWORD(atpByte) shl 16) or WORD($0000); { PR_RCVD_REPRESENTING_xxx
  383.     or PR_SENT_REPRESENTING_xxx }
  384.   attSentFor = (DWORD(atpByte) shl 16) or WORD($0001); { PR_SENT_REPRESENTING_xxx }
  385.   attDelegate = (DWORD(atpByte) shl 16) or WORD($0002); { PR_RCVD_REPRESENTING_xxx }
  386.   attDateStart = (DWORD(atpDate) shl 16) or WORD($0006); { PR_DATE_START }
  387.   attDateEnd = (DWORD(atpDate) shl 16) or WORD($0007); { PR_DATE_END }
  388.   attAidOwner = (DWORD(atpLong) shl 16) or WORD($0008); { PR_OWNER_APPT_ID }
  389.   attRequestRes = (DWORD(atpShort) shl 16) or WORD($0009); { PR_RESPONSE_REQUESTED }
  390.  
  391. implementation
  392.  
  393. const
  394.   Mapi32Dll = 'mapi32.dll';
  395.  
  396. function OpenTnefStream; external Mapi32Dll name 'OpenTnefStream';
  397. function OpenTnefStreamEx; external Mapi32Dll name 'OpenTnefStreamEx';
  398. function GetTnefStreamCodepage; external Mapi32Dll name 'GetTnefStreamCodepage';
  399.  
  400. end.
  401.  
  402.